/**
 * \file editeur_niveau.h
 * \author Olivier.H Quentin.M Benjamin.D
 * \version 1
 * \date 27 mai 2010
 *
 * Fichier qui permet de creer une interface pour creer un niveau.
 *
 */
#ifndef _EDITEUR_
#define _EDITEUR_

#include "jeuSDL.h"
#include "module_affichage.h"

/**
 *\fn void AfficherTerrainEditeur(const NIVEAU * terrain, const IMAGE * images, const int colonneDebut)
 *\brief permet d'afficher le fond du niveau que l'on veut creer
 *
 *\param terrain un niveau
 *\param images les images du style que l'on veut donner a notre niveau
 *\param colonneDebut indique l'endroit d'ou demarre l'affichage du niveau 
 */
void AfficherTerrainEditeur(const NIVEAU * terrain, const IMAGE * images, const int colonneDebut);

/**
 *\fn void AfficherInterfaceEditeur(const NIVEAU * terrain, const IMAGE * images)
 *\brief permet d'afficher les diferentes fonction disponible dans l'editeur 
 *
 *\param terrain le niveau
 *\param images les images des murs, pics, ennemis, flatiron...
 */
void AfficherInterfaceEditeur(const NIVEAU * terrain, const IMAGE * images);

/**
 *\fn void AfficherEditeur(const NIVEAU * terrain, const IMAGE * images, const int colonne)
 *\brief permet de faire l'affichage a l'ecran de l'editeur
 *
 *\param terrain le niveau
 *\param images les images du style du niveau
 *\param colonne le depart de l'affichage du niveau
 */
void AfficherEditeur(const NIVEAU * terrain, const IMAGE * images, const int colonne);

/**
 *\fn void ChangerDimension(NIVEAU * terrain, const int dimX, const int dimY)
 *\brief permet de modifier les dimensions du niveau lancer dans l'editeur
 *
 *\param terrain le niveau
 *\param dimX la largeur 
 *\param dimY le hauteur
 */
void ChangerDimension(NIVEAU * terrain, const int dimX, const int dimY);

/**
 *\fn void DecallerTerrain(NIVEAU * terrain, const int decallage)
 *\brief permet de decaller les case du terrain
 *
 *\param terrain le niveau
 *\param decallage le nombre de pixel dont on veut decaller le niveau
 */
void DecallerTerrain(NIVEAU * terrain, const int decallage);

/**
 *\fn void ChargerTerrainEditeur(const char * nomfichier, NIVEAU * terrain, int * capacite, char * fond)
 *\brief permet de charger un niveau existant dans l'editeur affin de le modifier
 *
 *\param nomniveau le nom du fichier a charger
 *\param terrain le niveau
 *\param capacite les capacite du hero
 *\param fond le style du jeu
 */
void ChargerTerrainEditeur(const char * nomfichier, NIVEAU * terrain, int * capacite, char * fond);

/**
 *\fn void SauvegarderTerrain(const char * nomfichier, const NIVEAU * terrain, const int capacite, const char fond)
 *\brief permet de sauvegarder les modifications effectuer dans l'editeur de niveau
 *
 *\param nomniveau le nom que l'on veut donner a notre sauvegarde
 *\param terrain le niveau
 *\param capacite les capacite du hero 
 *\param fond le style du niveau
 */
void SauvegarderTerrain(const char * nomfichier, const NIVEAU * terrain, const int capacite, const char fond);

/**
 *\fn void ChangementDeSet(IMAGE * images, char * fond, int augmenter)
 *\brief permet de passer au set suivant ou precedent
 *
 *\param images les images de l'affichage
 *\param fond le style du jeu
 *\param augmenter permet de savoir si on va au set suivant ou precedent
 */
void ChangementDeSet(IMAGE * images, char * fond, int augmenter);

/**
 *\fn void PlacerFlatiron(NIVEAU * terrain, const int x, const int y)
 *\brief permet de replacer flatiron dans le niveau
 *
 *\param terrain le niveau
 *\param x l'abscisse 
 *\param y l'ordonne
 */
void PlacerFlatiron(NIVEAU * terrain, const int x, const int y);

/**
 *\fn void PlacerSelection(NIVEAU * terrain, const char selection, const int x, const int y)
 *\brief permet de placer toutes les choses qui font le niveau (murs, ennemis ...)
 *
 *\param terrain le niveau
 *\param selection la chose que l'on veut placer
 *\param x l'abscisse
 *\param y l'ordonne
 */
void PlacerSelection(NIVEAU * terrain, const char selection, const int x, const int y);

/**
 *\fn void GestionClicEditeur(NIVEAU * terrain, char * selection, const int colonne, const int x, const int y)
 *\brief permet de gerer la souris dans l'editeur
 *
 *\param terrain le niveau
 *\param selection la chose choisie (murs, pics, ennemis...)
 *\param colonne permet de connaitre la premiere colonne afficher
 *\param x l'abscisse
 *\param y l'ordonne
 */
void GestionClicEditeur(NIVEAU * terrain, char * selection, const int colonne, const int x, const int y);

/**
 *\fn void EditerNiveau(char * fichierlecture, char * fichierecriture)
 *\brief c'est le main qui permet d'executer l'editeur
 *
 *\param fichierlecture le fichier qu'on lit au depart
 *\param fichierecriture le fichier sur lequel on ecrit la sauvegarde du nouveau niveau 
 */
void EditerNiveau(char * fichierlecture, char * fichierecriture);

#endif
